//app.js

var qcloud = require('./vendor/wafer2-client-sdk/index')
var config = require('./config')

/**
 * 登录态相关静态变量定义，便于if判断
 */
const UNPROMPTED = 0  //未弹窗
const UNAUTHORIZED = 1  //未授权or拒绝授权
const AUTHORIZED = 2  //已授权

App({
  userInfo: null,
  data: {
    authType: UNPROMPTED
  },
  onLaunch() {
    qcloud.setLoginUrl(config.service.loginUrl)
  },
  checkSession({ success, error }) {
    wx.checkSession({
      success: () => {
        this.getUserInfo({ success, error })
      },
      fail: () => {
        error && error()
      }
    })
  },
  login({ success, error }) {
    // 登录 主函数
    wx.getSetting({
      success: res => {
        if (res.authSetting["scope.userInfo"] === false) {
          this.data.authType = UNAUTHORIZED
          // 已拒绝授权，则
          wx.showModal({
            title: "提示",
            content: "请授权我们获取您的用户信息",
            showCancel: false
          })
          console.log("登录授权被拒！！！")
          error && error()
        } else {
          this.data.authType = AUTHORIZED
          this.doQcloudLogin({ success, error })
        }
      }
    })
  },
  doQcloudLogin({ success, error }) {
    // 进行登录，只有首次登陆才会返回用户信息
    qcloud.login({
      success: res => {
        if (res) {
          let userInfo = res
          this.userInfo = userInfo
          console.log("登陆成功！！！（首次登陆）")
          success && success({ userInfo })
        } else {
          // 如果不是首次登录，不会返回用户信息，请求用户信息接口获取
          this.getUserInfo({ success, error })
        }
      },
      fail: () => {
        console.log("登陆失败")
        error && error()
      }
    })
  },
  getUserInfo({ success, error }) {
    // 登录态已存在，直接从指定接口获取用户信息
    let userInfo = this.userInfo
    if (this.userInfo) {
      return (success && success({ userInfo }))
    }
    qcloud.request({
      url: config.service.requestUrl,
      login: true,
      success: res => {
        let data = res.data
        if (!data.code) {
          let userInfo = data.data
          this.userInfo = userInfo
          this.data.authType = AUTHORIZED
          console.log("获取用户信息成功！！！")
          success && success({ userInfo })
        } else {
          error && error()
        }
      },
      fail: res => {
        error && error()
      }
    })
  },
})